package com.longtop.framework.sys.org.web;

import com.longtop.framework.base.BaseAction;
import com.longtop.framework.common.Constant;
import com.longtop.framework.common.QueryConditions;
import com.longtop.framework.common.QueryResult;
import com.longtop.framework.sys.org.service.OrgService;
import com.longtop.framework.util.BeanUtil;
import com.longtop.framework.util.StringUtil;
import com.longtop.framework.util.WebUtil;
import com.longtop.intelliweb.action.IActionContext;
import com.longtop.intelliweb.action.IInitContext;
import com.longtop.intelliweb.view.Dataset;

public class OrgDropdownAction extends BaseAction {

	private final String DATASET_ORG = "Dataset_Org";

	/**
	 * 系统共用：初始化调用
	 */
	public void init(IInitContext context) {
		super.init(context);
	}

	/**
	 * 本页jsp：初始化业务数据(覆写父类方法)
	 */
	public void thisPageInit(IInitContext context) {
		Dataset orgDataset = context.getDataset(DATASET_ORG);
		if (!WebUtil.validateDatasetExist(this, orgDataset, DATASET_ORG)) {
			return;
		}
		OrgService orgService = getBean(OrgService.BEAN_ID);

		try {
			// hibernate:
			// QueryConditions conditions = WebUtil.createQueryConditions();
			// QueryResult queryResult = orgService.loadOrg(conditions, orgDataset.getFilter());
			// BeanUtil.queryResultToDataset(queryResult, orgDataset, false, true);

			// Ibatis实现：权控制数据权限：
			orgService.getOrgTreeAuth(orgDataset, context);

		} catch (Exception e) {
			e.printStackTrace();
			hintErrorMessage("机构加载错误。");
		}

		// 取的弹出窗的来源
		String from = context.getRequest().getParameter("from");

		// 来自数据权限的页面，做特殊处理
		if (!StringUtil.isStrEmpty(from) && "dataAuth".equals(from)) {
			if (orgDataset != null && orgDataset.size() > 0) {
				orgDataset.insertRecord(0);
				orgDataset.setValue("orgId", Constant.DATA_AUTH_OWNER);
				orgDataset.setValue("orgName", "用户所属部门");
				orgDataset.setValue("parentOrgId", "");

				/* 单位端的上级部门指包含 其角色所属部门的topOrgId及其以下的部门 */
				orgDataset.insertRecord(0);
				orgDataset.setValue("orgId", Constant.DATA_AUTH_PARENT_ORG);
				orgDataset.setValue("orgName", "用户上级部门");
				orgDataset.setValue("parentOrgId", "");

				/* 单位端的所有部门指包含 其角色所属部门的topOrgId及其以下的部门 */
				orgDataset.insertRecord(0);
				orgDataset.setValue("orgId", Constant.DATA_AUTH_ALL_ORG);
				orgDataset.setValue("orgName", "所有部门");
				orgDataset.setValue("parentOrgId", "");
			}
		}
	}

	/**
	 * 加载数据
	 * 
	 * @param context
	 */
	public void load(IActionContext context) {
		Dataset orgDataset = context.getDataset(DATASET_ORG);

		OrgService orgService = getBean(OrgService.BEAN_ID);
		try {
			// hibernate实现：
			QueryConditions conditions = WebUtil.createQueryConditions();
			QueryResult queryResult = orgService.loadOrg(conditions, orgDataset.getFilter());
			BeanUtil.queryResultToDataset(queryResult, orgDataset, false, true);
		} catch (Exception e) {
			e.printStackTrace();
			hintErrorMessage("机构加载错误。");
		}
	}
}
